
NAT 簡介
| 作者 | AM |
|---|---|
| 進度 | 完成 |
| 週次 | 2021.03 Week 4 |
網路位址轉換 Network Address Translation
用於將封包中的目標或來源 IP 改寫,典型的使用案例是解決 IPv4 位址不足的問題,
例如在家用分享器 (包含 Router 功能) 中常會區分 外網 (WAN) 和 區域網 (LAN),
外網設定會取得一個公開位址 (Public IP),對區域網的裝置通常會指派 RFC 1918 中規範的私有位址 (Private IP),包含:
10.0.0.0/8
172.16.0.0/12
192.168.0.0/16
而分享器設定時會有一個 Public IP ,但是分享器的目的在於讓內網的人都能上網,但是只有一個 Public IP,因此用到的是 NAT 技術,常見的模式分為 SNAT (Source NAT) 和 DNAT (Destination NAT),亦有 Basic NAT (Static NAT,轉換位址) ,NAPT (轉換位址和端口) 等類型,但本節僅介紹 SNAT 和 DNAT
SNAT
又稱 Masquerade 、IP 偽裝,家用分享器最主要使用的 NAT 模式,以下面的網路拓樸作為範例
+-------------------+ <-----> | Device 1 | 192.168.0.10
(Internet) <---> | 分享器 | <-----> | Device 2 | 192.168.0.11
+-------------------+ <-----> | Device 3 | 192.168.0.12
61.72.34.87 | 192.168.0.1
WAN | LAN
分享器對外只有一個 Public IP ,但是內網有三個裝置 ,SNAT的作用就是將內網送出去的封包改寫,把裡面的 Private IP 替換成 61.72.34.87 這個 Public IP,從外網送回來回應封包時會有一套機制叫 connection track 決定該封包轉送到哪個內網裝置上,但是僅限是內網裝置主動向外網發起請求,外網無法主動連接到內網
DNAT
DNAT 將外網主動發起的封包轉送到內網的指定主機上,不過一般還會設定服務類型 (如http, mail, ftp) ,用途上 DNAT 可做到類似DMZ的效果。
例如在內網架設網頁伺服器,分享器設定 DNAT: TCP : 80 端口的封包轉送至 192.168.0.11,那 Remote Client 可以在瀏覽器使用 61.72.34.87 這個來連到 Web Server
+-----------+ <-> | Device 1 | 192.168.0.10
Remote Client <-> (Internet) <-> | 分享器 | <-> | Web Server | 192.168.0.11
+-----------+ <-> | Device 3 | 192.168.0.12
61.72.34.87 | 192.168.0.1
WAN | LAN
Web Server 的回應封包,理論上是透過 SNAT 回應的,推測是系統在設定DNAT時會自動設定,非顯式設定,但是建議還是要適當的手動加入一些 SNAT 規則。
Linux NAT 設定 (IPTables / IPv4)
<> 為必填引數,請替換成對應的參數,[] 為應變引數,某些情況必填
1. 首先需要開啟 Linux 的 IP Forwarding 功能
輸入指令 vim /etc/sysctl.conf 打開配置文件
在文件中找到該行並把等號後的數字改成 1
# net.ipv4.ip_forward = 1
輸入指令 sysctl -p 使更改生效
2. SNAT 設定指令
POSTROUTING 是 Linux iptables 裡面的一個 chain,相對來說是負責數據的輸出
# iptables -t nat -A POSTROUTING -s <來源網段/遮罩> -o <目標網段網卡名稱> -j MASQUERADE把 Linux 當成家用分享器為例,來源網段就是內網 (LAN),目標網段就是外網 (WAN),-o 後必須填入連接外網的網卡名稱,最後 -j 後寫 MASQUERADE 表示是 SNAT
3. DNAT 設定指令
PREROUTING 則在 iptables 中相對來說負責了數據的輸入
# iptables -t nat -A PREROUTING -d <接收IP(外網)> -i <接收IP的網卡名稱> -p <協議類型> [--dport 指定的端口] -j DNAT --to-destination <真實的目標IP>接續上面家用分享器的例子,並在內網設一個負責特定服務的主機,-d 引數需要的是分享器的外網IP,-i 則填入負責前一個引數之IP的網卡,若有設有多個外網網卡也可以替換,有綁定服務到指定IP的概念,-p 則是指定該服務使用的網路協議如 tcp、udp、icmp 等,--dport 視情況填入或是不填,如 http (無加密) 網頁伺服器就需要該引數並填入 80,--to-destination 則是該服務主機在內網實際的IP
AM